package com.example.demo.Controller;

import com.example.demo.Dao.UserBook;
import com.example.demo.Service.UseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;

import javax.annotation.Resource;

//我们用Spring创建的对象（依赖注入）有：属性注入；构造方法注入；set方法注入
@Controller
public class BookController {

    /*这是第一种取Spring中创建好对象的方式：属性注入方法
    @Autowired
    private UserBook userBook ;
    //所以我们BookController就依赖我们UserBook；我们就可以用Spring创建的对象了，我们就无需再创建了
    */



    //第二种：构造方法注入,当存在多个构造函数的时候，默认是调用无参的构造函数；
   /*

   private UserBook userBook;

    public BookController(){  //默认会调用无参的构造函数

    }
  //所以当有多个构造方法的时候，会默认调用无参的并且不需要用注解，但是你想调用其他的那就加注解：@Autowired
    @Autowired    ///默认会调用无参的构造函数，所以我们要想调用其他的构造函数就需要加@Autorwried，
    public BookController(UserBook userBook){
        System.out.println("调用了一个参数的构造函数");
        this.userBook = userBook;
    }

    */



    //第三种,使用set方法，这个必须加注解

    /*
    private UserBook userBook;

    @Autowired
    public void setUserBook(UserBook userBook) {
        this.userBook = userBook;
    }

    public void fun(){
        userBook.printf();
        System.out.println("do BookController");
    }


     */


    //使用第一种方式属性注入会有问题

 /*   @Autowired
    private UserBook userBook3;
    public void fun(){
        System.out.println(userBook3);
        System.out.println("do BookController");
    }

  */


    /*
    @Qualifier("userBook1")
    @Autowired
    private UserBook userBook3;
    public void fun(){
        System.out.println(userBook3);
        System.out.println("do BookController");
    }


     */


/*    @Resource(name = "userBook1")
    private UserBook userBook3;
    public void fun(){
        System.out.println(userBook3);
        System.out.println("do BookController");
    }*/

    @Autowired
    private UseService useService;
    public void fun(){
        useService.gacc();
    }
}
